<!DOCTYPE HTML>
<html>
<head>
<title>If Var [not] in/contains MatchList | AutoHotkey v1</title>
<meta name="description" content="The &quot;If Var [not] in/contains MatchList&quot; statement checks whether a variable's contents match one of the items in a list." />
<meta name="ahk:equiv-v2" content="lib/If.htm" />
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<link href="../static/theme.css" rel="stylesheet" type="text/css" />
<script src="../static/content.js" type="text/javascript"></script>
</head>
<body>

<h1>If Var [not] in/contains MatchList</h1>

<p>检查<a href="../Variables.htm">变量的</a>内容是否匹配列表中的某项.</p>

<pre class="Syntax">
<span class="func">if</span> Var <span class="func">in</span> MatchList
<span class="func">if</span> Var <span class="func">not in</span> MatchList

<span class="func">if</span> Var <span class="func">contains</span> MatchList
<span class="func">if</span> Var <span class="func">not contains</span> MatchList
</pre>
<h2 id="Parameters">参数</h2>
<dl>

  <dt>Var</dt>
  <dd><p>需要被检查的<a href="../Variables.htm">变量</a>名称. 对于 "in" 运算符, 需要准确匹配列表中的某项.<br>对于 "contains" 运算符, 会更容易形成匹配: 只要列表中的某项作为子字符串包含于 <em>Var</em> 中.</p></dd>

  <dt>MatchList</dt>
  <dd><p>逗号分隔的字符串列表, 其中的每个字符串都将与 <em>Var</em> 的内容进行比较以寻找匹配. <strong>在分隔逗号周围的任何空格或 tab 都是有意义的</strong>, 这表示它们也是匹配字符串的一部分. 例如, 如果 <em>MatchList</em> 被设置为 <code>ABC , XYZ</code>, 这时 <em>Var</em> 必须包含带有尾随空格的 ABC 或带有前导空格的 XYZ 才形成匹配.</p>
      <p>在匹配列表中两个连续的逗号产生单个原义逗号. 例如, 后面的匹配列表会在 string1 的末尾产生单个原义逗号: <code>if Var in string1,,,string2</code>. 同样地, 后面的匹配列表仅包含其中含有一个原义逗号的单个项目: <code>if Var in single,,item</code>. 要在列表中包含空的项目, 那么像这个例子那样把逗号作为首个字符: <code>if Var in ,string1,string2</code>(用于 "contains" 运算符时, 由于在所有字符串中都可以找到空项, 所以空项将总是会形成匹配).</p>
      <p>因为 <em>MatchList</em> 中的每一项并不是作为独立的参数, 所以此列表可以完整的包含在一个变量中. 事实上, 如果此列表的长度超过 16383, 那么列表的全部或部分必须包含在变量中以变量表示, 因为这个长度是任何脚本行的最大长度. 例如, <em>MatchList</em> 可以由 <code>%List1%,%List2%,%List3%</code> 组成, 其中的每个子列表包含了用来匹配词组的一个大的列表.</p>
      <p>列表中任何长度超过 16384 字符的单个项目, 超出长度的那些字符将被视为一个新列表项. 因此, 通常最好避免包含这样的项目.</p></dd>

</dl>

<h2 id="Remarks">备注</h2>
<p>比较总是按字母顺序进行, 而不是作为数字. 例如, 字符串 "11" 不会匹配列表项 "11.0".</p>
<p>除了支持搜索多个字符串(其中任何一个都将形成匹配) 外, "contains" 运算符的作用与 <a href="InStr.htm">InStr()</a> 或 <a href="IfInString.htm">If[Not]InString</a> 相同.</p>
<p>可以使用 <code><a href="StringCaseSense.htm">StringCaseSense</a> On</code> 来设置在比较时区分大小写.</p>
<p>如果 <em>MatchList</em> 较长, 可以通过<a href="../Scripts.htm#continuation">延续片段</a>方法将其分解成较短的几行, 这样可以增加可读性和可维护性.</p>
<p>运算符 "in" 和 "contains" 不支持用于<a href="../Variables.htm#Expressions">表达式</a>中. 相反, 使用 <a href="IfExpression.htm">If 语句</a>, 如 <code>if (Var ~= "i)\A(Value1|Value2)\z")</code> 表示 "in", 或 <code>if (Var ~= "i)Value1|Value2")</code> 表示 "contains", 来模拟这些运算符的行为.</p>

<h2 id="Related">相关</h2>
<p><a href="IfBetween.htm">If Var [not] between Low and High</a>, <a href="IfEqual.htm">IfEqual/Greater/Less</a>, <a href="IfInString.htm">IfInString</a>, <a href="StringCaseSense.htm">StringCaseSense</a>, <a href="Block.htm">区块</a>, <a href="Else.htm">Else</a></p>

<h2 id="Examples">示例</h2>
<div class="ex" id="ExInString">
<p><a class="ex_number" href="#ExInString"></a> 检查 <var>var</var> 是否为文件扩展名 exe, bat 或 com.</p>
<pre>if var in exe,bat,com
    MsgBox The file extension is an executable type.</pre>
</div>

<div class="ex" id="ExInNumber">
<p><a class="ex_number" href="#ExInNumber"></a> 检查 <var>var</var> 是否为质数 1, 2, 3, 5, 7 or 11.</p>
<pre>if var in 1,2,3,5,7,11 <em>; 避免在列表中添加空格.</em>
    MsgBox %var% is a small prime number.</pre>
</div>

<div class="ex" id="ExContainsNumber">
<p><a class="ex_number" href="#ExContainsNumber"></a> 检查 <var>var</var> 是否包含数字 1 或 3.</p>
<pre>if var contains 1,3  <em>; 注意, 比较的值是字符串, 而不是数字.</em>
    MsgBox Var contains the digit 1 or 3 (Var could be 1, 3, 10, 21, 23, etc.)</pre>
</div>

<div class="ex" id="ExVar">
<p><a class="ex_number" href="#ExVar"></a> 检查 <var>var</var> 是否是 <var>MyItemList</var> 中的一个项目.</p>
<pre>if var in %MyItemList%
    MsgBox %var% is in the list.</pre>
</div>

<div class="ex" id="ExInputBox">
<p><a class="ex_number" href="#ExInputBox"></a> 允许用户输入一个字符串, 并检查它是否是单词 yes 或 no.</p>
<pre>InputBox, UserInput, Enter YES or NO
if UserInput not in yes,no
    MsgBox Your input is not valid.</pre>
</div>

<div class="ex" id="ExWinGetTitle">
<p><a class="ex_number" href="#ExWinGetTitle"></a> 检查 <var>active_title</var> 是否包含 "Address List.txt" 或 "Customer List.txt", 检查是否不包含 "metapad" 或 "Notepad".</p>
<pre>WinGetTitle, active_title, A
if active_title contains Address List.txt,Customer List.txt
    MsgBox One of the desired windows is active.
if active_title not contains metapad,Notepad
    MsgBox But the file is not open in either Metapad or Notepad.</pre>
</div>

</body>
</html>